/*
 * Copyright (c) 2008-2017 浩瀚深度 All Rights Reserved.
 *
 * FileName: JsonMsgOperType.java
 *
 * Description：
 *
 * History:
 * v1.0.0, zmw, 2017年8月10日, Create
 */
package com.monitor.config.zmq;

/**
 * MIDs标示message对象
 *
 * @author zmw
 * @version 1.0.0
 * @since 1.0.0
 */
public enum JsonMsgOperType {
    /**
     * 需要查询的具体对象
     */
    QUERY("查询", 1),
    /**
     * 查询全部
     * 不需要关心message对象
     */
    QUERYTOTAL("查询全部", 2),
    /**
     * 覆盖增加（修改/编辑/更新）
     * MIDs相同的对象会被此部分信息覆盖，对于不存在的MIDs为新增，可以认为对于MIDs相同的对象进行先删除后添加的方式
     */
    OVERLAPADD("覆盖增加", 3),
    /**
     * 增量添加
     * MIDs相同的对象信息被此部分信息追加，对于不存在的MIDs为新增
     */
    INCREMENTALADD("增量增加", 4),
    /**
     * 整体删除
     * 删除MIDs对应的对象，对于不存在的MIDs不处理
     */
    DELETEALL("全部删除", 5),
    /**
     * 部分删除
     * 删除MIDs对应的对象中的部分数据（如部分IP地址），对于不存在的MIDs不处理
     */
    DELETE("部分删除", 6),
    /**
     * 清除
     * 全部删除所有的message对象
     */
    CLEAR("清除", 7),
    /**
     * 同步
     * 先清除，然后覆盖增加（即：先执行7再执行3）
     */
    SYNC("同步", 8),
    /**
     * 不支持的操作类型
     */
    UNKNOWN("未知操作", 999);
    /**
     * 操作名称
     */
    private String operName;
    /**
     * 操作类型
     */
    private Integer operType;

    /**
     * 获取应答码的Code
     *
     * @param operType 应答码
     * @return JsonMsgResponseCode
     */
    public static JsonMsgOperType obtainEnum(Integer operType) {
        if (operType == null) {
            return UNKNOWN;
        }
        switch (operType) {
            case 1:
                return QUERY;
            case 2:
                return QUERYTOTAL;
            case 3:
                return OVERLAPADD;
            case 4:
                return INCREMENTALADD;
            case 5:
                return DELETEALL;
            case 6:
                return DELETE;
            case 7:
                return CLEAR;
            case 8:
                return SYNC;
            default:
                return UNKNOWN;
        }
    }

    /**
     * @param operName 操作名称
     * @param operType 操作类型
     */
    private JsonMsgOperType(String operName, Integer operType) {
        this.operName = operName;
        this.operType = operType;
    }

    /**
     * @return the operName
     */
    public String getOperName() {
        return operName;
    }

    /**
     * @return the operType
     */
    public Integer getOperType() {
        return operType;
    }
}
